package com.hb;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;

// 说明这是一个文档
@Document
/**
 * Order 类添加了 @Document 注解，这样它就能够借助 MongoTemplate 或自动生成的 Repository 进行持久化。其 id 属性上使用了@Id注解，用来指定它作为文档的 ID。
 * 除此之外，customer 属性上使用了 @Field 注解，这样的话，当文档持久化的时候 customer 属性将会映射为名为 client 的域。注意，其他的属性并没有添加注解。除非将
 * 属性设置为瞬时态（transient）的，否则 Java 对象中所有的域都会持久化为文档中的域。并且如果我们不使用 @Field 注解进行设置的话，那么文档域中的名字将会与对应的
 * Java 属性相同。
 */
public class Order {
    /**
     * 指定 ID
     */
    @Id
    private String id;

    /**
     * 覆盖默认域名
     */
    @Field("client")
    private String customer;

    private String type;

    /**
     * 同时，需要注意的是 items 属性，它指的是订单中具体条目的集合。在传统的关系型数据库中，这些条目将会保存在另外的一个数据库表中，通过外键进行应用，
     * items 域上很可能还会使用 JPA 的 @OneToMany 注解。文档可以与其他的文档产生关联，但这并不是文档数据库所擅长的功能。在本例购买订单与行条目之
     * 间的关联关系中，行条目只是同一个订单文档里面内嵌的一部分。因此，没有必要为这种关联关系添加任何注解。实际上，Item 类本身并没有任何注解。
     */
    private Collection<Item> items = new LinkedHashSet<Item>();

    public String getCustomer() {
        return customer;
    }

    public void setCustomer(String customer) {
        this.customer = customer;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Collection<Item> getItems() {
        return items;
    }

    public void setItems(Collection<Item> items) {
        this.items = items;
    }

    public String getId() {
        return id;
    }
}
